<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>php学习笔记[034]</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="show"><span>0034 制作常用的图片验证码</span></div>
<?php include 'include/top.php';?>
<div class="text">
<b>image与header</b>
我们上节课接触过的两个函数<br />
在<strong>GD</strong>库中<strong>image</strong>支持3种类型，分别是<strong>gif、jpeg、png</strong>我们书写的时候也就根据三个类型写成：<br />
<strong>imagegif(*)</strong><strong>imagejpeg(*)</strong><strong>imagepng(*)</strong><br />
<strong>header</strong>是提示页面将用什么格式的方式处理数据流，其写法为：<br />
<strong>Content-Type: xxxx/yyyy、 Location: xxxx:yyyy/zzzz、Status: nnn xxxxxx</strong>
我们在这里仅讲解<strong>Content-Type: xxxx/yyyy</strong><br />
xxxx代表数据流，yyyy代表格式，比如我们的<br />
<strong>header('Content-type: image/png')</strong>该数据流为图片，我们用png编码格式进行解析<br />

</div>

<div class="text">
<b>干扰线和噪点</b>
我们需要用到两个函数来建立干扰线和噪点。
imageline (图片,起始x轴,起始Y轴,末尾x轴,末尾Y轴,颜色)<br />
imagesetpixel (图片,x轴,y轴,颜色)<br />
我们在<strong>file</strong>目录下建立一个<strong>s034_1.php</strong>的文件里面加入下面的代码<br />
<div class="code">&lt;?php<br />
  session_start();//开启session功能<br />
$str='';<br />
for($i=0;$i&lt;4;$i++)<br />
{<br />
$str.=dechex(rand(1,15));<br />
}<br />
$_SESSION['img']=$str;//制作需要写入的字符串<br />
$img=imagecreatetruecolor(100,30);//建立一个图片<br />
$bg=imagecolorallocate($img,0,0,0);//建立一种颜色<br />
$uc=imagecolorallocate($img,rand(100,250),rand(100,250),rand(100,250));//建立第二种颜色<br />
imagefill($img,0,0,$bg);//用$bg颜色填充画板,从0.0位置开始<br />
imagestring($img,6,rand(5,65),rand(5,15),$str,$uc);//使用六号字体从随机5-65,5-15位置开始用$str文字选择$uc颜色进行填充<br />
for($i=0;$i&lt;2;$i++)<br />
{<br />
$linecolor=imagecolorallocate($img,rand()%250,rand()%250,rand()%250);//用随机颜色<br />
imageline($img,0,rand(0,30),100,rand(0,30),$linecolor);//对$img用$linecolor颜色画线,用设置的随机起始终结位置<br />
}<br />
for($i=0;$i&lt;300;$i++)<br />
{<br />
$pixcolor=imagecolorallocate($img,rand()%250,rand()%250,rand()%250);<br />
imagesetpixel($img,rand()%100,rand()%30,$pixcolor);//对$img用$pixcolor颜色画点,用设置的随机起始终结位置<br />
}<br />
imagepng($img);//使用png格式对编码经行编译<br />
header('Content-type: image/png');//使用png格式对数据流经行解析<br />
imagedestroy($img);//清理制作图片所占用的内存<br />
?&gt; <br />
</div>
我们用img标签引入这个文件<br />
<div class="effect">
<img src="file/s034_1.php">
</div>
</div>
<div class="text">
<b>中文验证码</b>
制作中文验证码用到<strong>字体文件</strong>和<strong>imagettftext</strong>函数<br />
<strong>imagettftext</strong>函数的用法：<strong>imagettftext(图片,字体大小,倾斜度,起始x坐标,起始Y坐标,颜色,字体文件,字符串)</strong><br />
当页面编码不是utf8的情况下需要用函数<strong>iconv</strong>转换它<strong>iconv('原始编码','目标编码','内容')</strong><br />
同样我们在file文件夹中建立一个<strong>s034_2.php</strong>的文件，写入下面的代码<br />
<div class="code">
&lt;?php<br />
session_start();//开启session功能<br />
$str='中文验证码';<br />
//如果页面编码不是utf8格式的话需要用iconv(&quot;gb2312&quot;,&quot;UTF-8&quot;,&quot;新年快乐！&quot;)函数对齐经行编码转换<br />
$_SESSION['img']=$str;//制作需要写入的字符串<br />
$img=imagecreatetruecolor(100,30);//建立一个图片<br />
$bg=imagecolorallocate($img,0,0,0);//建立一种颜色<br />
$uc=imagecolorallocate($img,rand(100,250),rand(100,250),rand(100,250));//建立第二种颜色<br />
imagefill($img,0,0,$bg);//用$bg颜色填充画板,从0.0位置开始<br />
imagettftext($img,14,rand(-5,5),0,20,$uc,'simkai.ttf',$str);//此时的字体文件<strong>simkai.ttf</strong>在本目录下<br />
for($i=0;$i&lt;2;$i++)<br />
{<br />
$linecolor=imagecolorallocate($img,rand()%250,rand()%250,rand()%250);//用随机颜色<br />
imageline($img,0,rand(0,30),100,rand(0,30),$linecolor);//对$img用$linecolor颜色画线,用设置的随机起始终结位置<br />
}<br />
for($i=0;$i&lt;300;$i++)<br />
{<br />
$pixcolor=imagecolorallocate($img,rand()%250,rand()%250,rand()%250);<br />
imagesetpixel($img,rand()%100,rand()%30,$pixcolor);//对$img用$pixcolor颜色画点,用设置的随机起始终结位置<br />
}<br />
imagepng($img);//使用png格式对编码经行编译<br />
header('Content-type: image/png');//使用png格式对数据流经行解析<br />
imagedestroy($img);//清理制作图片所占用的内存<br />
?&gt; <br />
</div>
我们用img标签引入这个文件<br />
<div class="effect">
<img src="file/s034_2.php" />
</div>
</div>

</body>
</html>
